package com.xuanyuanxinyu.utils

import android.content.ContentValues
import android.content.Context
import android.os.Build
import android.os.Environment
import android.provider.MediaStore
import com.xuanyaun.coreutils.file.FileIOUtils
import com.xuanyaun.coreutils.file.FileUtils
import java.io.File

/**
 * @FileName:AlbumManager
 * @Description:相册文件管理
 * @author ken.luo
 * @date 2023/4/4
 * @version V1.0
 * @email 424533553@qq.com
 */
class AlbumManager {
    /**
     * 插入文件到手机系统相册中
     *
     * 注意：put(MediaStore.Images.Media.IS_PENDING, 1)。这个设置是做耗时操作时，需要独占资源。
     * 但是使用结束后，务必注意解除独占。put(MediaStore.Images.Media.IS_PENDING, 0)
     */
    fun insertImage(context : Context,filePath : String) {
        if (!FileUtils.checkFile(filePath)) {
            return
        }
        val resolver = context.applicationContext.contentResolver
        val imageCollection = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)
        } else {
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI
        }
        val contentValues = ContentValues().apply {
            val saveFile = File(filePath)
            put(MediaStore.Images.Media.DISPLAY_NAME,saveFile.nameWithoutExtension + System.currentTimeMillis())
            //设置文件类型为image/*
            put(MediaStore.MediaColumns.MIME_TYPE,FileUtils.getPhotoMimeType(filePath))
            val imageTime = System.currentTimeMillis()
            put(MediaStore.MediaColumns.DATE_ADDED,imageTime / 1000)
            put(MediaStore.MediaColumns.DATE_MODIFIED,imageTime / 1000)
            // 判断是否android10 以上
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                // 设置相对路径（自动创建文件夹）
//                val folder = context.resources.getString(R.string.app_name)
                val folder = "SmartApp"
                val relativeName = Environment.DIRECTORY_PICTURES + File.separator + folder + File.separator
                put(MediaStore.MediaColumns.RELATIVE_PATH,relativeName)
                // 设置独占锁：耗时操作，独占访问权限，完成操作需复位
                put(MediaStore.Images.Media.IS_PENDING,1)
            }
        }
        resolver.insert(imageCollection,contentValues)?.let { insertUri->
            val isSuccess = FileIOUtils.copyFile(context,resolver,filePath,insertUri)
            //判断是否android10 以上
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                // 复位（解除）独占权限
                contentValues.clear()
                contentValues.put(MediaStore.Images.Media.IS_PENDING,0)
                resolver.update(insertUri,contentValues,null,null)
            }
        }
    }
    
    
}